/*
* Copyright 2011 Pavel Kozhin 
*
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
* http://www.apache.org/licenses/LICENSE-2.0
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed  under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License.
*
* Author: Pavel Kozhin.
*/
package org.etherframework.core.manager
{
	import mx.core.Singleton;
	import mx.managers.ISystemManager;

	[Mixin]
	public class EtherManager
	{
		private static var _impl:IEtherManager = null;
		private static var _systemManager:ISystemManager;
		
		public static function init(systemManager:ISystemManager):void
		{
			_systemManager = systemManager;
		}
		
		public static function getInstance():IEtherManager
		{
			if (!_impl)
			{
				if (!Singleton.getClass("org.etherframework.core.manager::IEtherManager"))
				{
					Singleton.registerClass("org.etherframework.core.manager::IEtherManager", 
						EtherManager);
				}
				else
				{
					throw new Error("Please, make sure that there is only one " +
						"IEtherManager is used in this application.");
				}
				
				_impl = new EtherManagerImpl();
				EtherManagerImpl(_impl).systemManager = _systemManager;
			}
			
			return _impl;
		}
	}
}